/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package MVC;

import protocol.*;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

/**
 *
 * @author taillefe
 */
public class Send {

    private DatagramSocket socket;
    private int port;



    @SuppressWarnings("empty-statement")

    // Méthode lancée pour initialiser le Sender
    public void init() {
        try {
            // Initialisation du socket avec un port d'écoute (qui ne sera pas utilisé !)
            socket = new DatagramSocket();
            port = 2235;
        } catch (SocketException ex2) {
            System.out.println("Impossible d'initialiser le socket !");;
        }          
    }


    public void sendMessage(Message message, InetAddress adr) throws UnknownHostException {
      
        // Création du flux de sortie
        ByteArrayOutputStream buf = new ByteArrayOutputStream();

        // Création de l'objet pour serializer
        ObjectOutputStream oos;
        try {
            oos = new ObjectOutputStream(buf);
            oos.writeObject(message);
        } catch (IOException ex3) {
            System.out.println("Impossible de creer le flux de sortie !");
          }

        // Serialization de l'objet
        byte [] b = buf.toByteArray();

        // Création du datagramme UDP
        DatagramPacket packet = new DatagramPacket(b, b.length, adr, port);

        try {
            socket.send(packet);
            } catch (IOException ex4) {
                    System.out.println("Probleme avec le send !");
              }
    }

    	/**
	 * Permet de Sérialiser un objet de type Message
	 * @return un tableau de byte
	 */
	public byte[] serialiser(){
		 byte[] result=null;

		 try {

			    ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
			 	ObjectOutputStream oos= new ObjectOutputStream(bos);
				// serialisation : ecriture de l'objet dans le flux de sortie
				oos.writeObject(this);
				// on vide le tampon
				oos.flush();
				System.out.println(this.toString() + " a ete serialise");
				result = bos.toByteArray();
			}
		 catch(IOException ioe) {
				ioe.printStackTrace();
				System.out.println("PROBLEME methode write:" +this + "n'a pas ete serialise");
			}
		return result;
	}
}
